//
// Created by Administrator on 2021/10/21.
//

#ifndef MRENDER_SCENE_H
#define MRENDER_SCENE_H

#include <vector>
#include "Camera.h"
#include <glad/glad.h>
#include <GLFW/glfw3.h>

class Scene : public Object3D{
private:
    /**
     * 子列表
     */
    std::vector<Object3D*> childrenList;

public:
    /**
     * 提供外部查看
     * @return 子列表
     */
    const std::vector<Object3D *> &getChildrenList() const;

public:
    void onInit() override;
    void onRender(float time, Matrix4x4 proj, Matrix4x4 view, Matrix4x4 pworld) override;
public:
    /**
     * 构造函数
     */
    Scene();

    ~Scene();

    /**
     * 添加子对象
     * @param object 物体，继承Object3D
     */
    void add(Object3D* object);

    /**
     * 移除子对象
     * @param object 物体，继承Object3D
     */
    void remove(Object3D* object);

    /**
     * 获得激活相机
     * @return 相机
     */
    Camera *getActiveCamera() const;

    /**
     * 设置激活相机
     * @param _camera 相机
     */
    void setActiveCamera(Camera * _camera);

    /**
     * 静态方法提供给外部，可能为空
     * @return 场景中正处于激活中的相机
     */
    static Camera *getStaticActiveCamera();
};


#endif //MRENDER_SCENE_H
